package priv.conceit.study.leetcode.simple.official;

/**
 * 编号009
 * 回文数
 * <a href="https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode/"></a>
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 * 示例1：
 * 输入: 121
 * 输出：true
 * 示例2：
 * 输入: -121
 * 输出：false
 * 示例3：
 * 输入: 10
 * 输出：false
 *
 * 思路处理后半段就可以
 * input 1221
 * 取最后一位 1221/10=1
 * 取倒数第二位 122/10=2
 * 拼接为1*10+2=12
 * 进行比较12==12?ture:false
 *
 *
 *
 *
 * @author Conceit
 * @since 1.0.0, 2019/7/7
 */
public class PalindromeNumber {

	public static void main(String[] args) {
		boolean flag=new PalindromeNumber().isPalindrome(10);
		System.out.println(flag);
	}

	public boolean isPalindrome(int x) {

		/**
		 * 末尾==0或者小于0
		 */
		if(x<0||(x%10==0&&x!=0)){
			return Boolean.FALSE;
		}

		/**
		 *
		 * 每次反转数 每次计算 反转数=反转数*10+x/10;
		 */
		int revertedNumber=0;

		/**
		 * 终止条件
		 * 当反转数大于x
		 * 说明已经终止
		 *
		 * 若x=1221
		 * revertedNumber=0*10+1->1
		 * x=x/10=122
		 *
		 * revertedNumber=1*10+2->12
		 * x=x/10->12
		 * 循环结束x=revertedNumber
		 * return x=revertedNumber->true
		 *
		 * 若x=13221->
		 * revertedNumber=0*10+13221%10=1
		 * x=x/10=1322
		 *
		 * revertedNumber=1*10+1322%10=12
		 * x=x/10=132
		 *
		 * revertedNumber=12*10+132%10=122
		 * x=x/10=13
		 * 循环结束x < revertedNumber
		 * return x!=revertedNumber->false
		 *
		 * 若x=125621
		 * revertedNumber=0*10+125621%10=1
		 * x=x/10=12562
		 *
		 * revertedNumber=1*10+12562%10=12
		 * x=x/10=1256
		 *
		 * revertedNumber=12*10+1256%10=126
		 * x=x/10=125
		 * 循环结束x < revertedNumber
		 * return x!=revertedNumber 126/10!=x  false
		 *
		 *
		 *
		 */
		while (revertedNumber<x){
			revertedNumber=revertedNumber*10+x%10;
			x/=10;
		}

		//==则说明 位数为1221 类似的双数
		//如果是12021这种情况 则需要/10
		return revertedNumber==x||revertedNumber/10==x;

	}


}
